<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 自定义假值判断
  function judgementFalse (val) {
    if (val === 0) return true
    else if (val === '') return false
    else if (Object.is(val, NaN)) return false
    else if (val === '') return false
    else if (val === '') return false
    else if (val === '') return false
  }


  // 判断一个变量是否为NaN
  // 1. 利用 NaN 是唯一一个不等于自身的特点
  function _isNaN (val) {
    if (val !== val) {
      return true;
    }
    return false;
  }
  // 2. 利用 ES6 中提供的 Object.is() 方法
  var a = "string";
  var b = 2;
  var c = a / b;  // NaN

  Object.is(a, NaN);	// false
  Object.is(b, NaN);	// false
  Object.is(c, NaN);	// true

  // 3. 使用 isNaN （并不推荐）
  function _isNaN (val) {
    if (typeof (val) === 'number' && isNaN(val)) {
      return true;
    }
    return false;
  }

  let testArr = [1, -1, 5.123, 0, -0, document.all, Infinity, -Infinity, '', "", '1.5', 'one', '0', '-0', ' ', {}, [], ['1'], [1], ['one'], true, false, undefined, null, NaN]
  let resultArr = []
  for (let i = 0; i < testArr.length; i++) {
    try {
      resultArr.push({
        '值': testArr[i],
        '转换成布尔': Boolean(testArr[i]),
        '转换为字符串': String(testArr[i]),
        '转换为数字': Number(testArr[i]),
        'isFinite': isFinite(testArr[i]),
        'typeof': typeof (testArr[i]),
      })

    } catch (e) {
      resultArr.push({
        '值': testArr[i],
        '转换成布尔': Boolean(testArr[i]),
        '转换为字符串': String(testArr[i]),
        '转换为数字': Number(testArr[i]),
        'isFinite': '无效',
        'typeof': typeof (testArr[i]),
      })
    }
  }
  console.table(resultArr)

  console.log(JSON.stringify(resultArr))

  // 会修改原始数据的方法
</script>

</html>